home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / pcl_src.zoo / 3-17-88-notes.txt < prev    next >
Text File  |  1988-05-05  |  7KB  |  168 lines

  1. Copyright (c) Xerox Corporation 1988. All rights reserved.
  2.  
  3. These notes correspond to the beta test release of March 17th 1988.
  4. Later versions of this release will run in the usual lisps, but for the
  5. time being this has only been tested in Symbolics, Lucid, Coral,
  6. Xerox, Ibuki (01/01), TI and VAXLisp Common Lisps.
  7.  
  8. Note may not run in all Franz Lisps, I believe it runs on the SUN3
  9. though.  I will get back to this in a few days when I get the needed
  10. code from Franz.
  11.  
  12. ***
  13. This release will run in Lucid 3.0 beta 2, with the boolean.lbin patch.
  14.  
  15. ***
  16. This release contains a prototype implementation of the make-instance
  17. behavior documented in the CLOS specification (X3J13 document # 88-002).
  18. This prototype implementation does not provide high performance, but it
  19. should conform to the specification with one exception, it does not
  20. check the validity of the initargs.
  21.  
  22. All the generic functions in the instance creation protocol are as
  23. specified in the CLOS specification except that make-instance is called
  24. mki instead.  This name is a temporary name, it is so that people can
  25. try out the new make-instance protocol without having to convert all
  26. their code at once.  In a future release, the name make-instance will be
  27. switched to the new behavior.
  28.  
  29. ***
  30. Standard method combination is supported.  General declarative
  31. method combination is not yet supported, so define-method-combination does
  32. not yet work, but standard method combination is what generic functions
  33. do by default now.  :after :before :around and unqualified methods are
  34. supported.  Error checking is minimal.
  35.  
  36. ***
  37. call-next-method works with standard-method-combination.
  38. call-next-method is much faster than it was before, and call-next-method
  39. behaves as a lexically defined function.  This means it is possible to
  40. pass around funargs which include call-next-method.
  41.  
  42. ***
  43. All uses of slot-value within a method body should be optimized.  It
  44. should no longer be necessary to use with-slots just to get the
  45. optimization.
  46.  
  47. ***
  48. There are new macros with-slots* and with-accessors*.  These correspond
  49. to the macros which will appear in the final specification, with-slots
  50. and with-accessors.  They work as follows:
  51.  
  52. (with-slots* ((x x-slot)             
  53.               (y y-slot))         ===\ (let ((#:g1 (foo)))
  54.              (foo)                ===/   (swapf (slot-value #:g1 'x-slot)
  55.   (swapf x y))                                  (slot-value #:g1 'y-slot))) 
  56.  
  57. (with-accessors* ((x position-x)          
  58.                   (y position-y)) ===\ (let ((#:g1 (foo)))
  59.                  (foo)            ===/   (incf (position-x #:g1))
  60.   (incf x)                               (incf (position-y #:g1)))
  61.   (incf y))
  62.  
  63. As an abbreviation, the (<variable-name> <slot-name>) pairs in with-slots*
  64. can be abbreviated to just <variable-and-slot-name> when the variable
  65. and slot name are the same.  This means that:
  66.  
  67. (with-slots* (x y z) <instance-form> &body <body>)
  68.  
  69. is equivalent to:
  70.  
  71. (with-slots* ((x x) (y y) (z z)) <instance-form> &body <body>)
  72.  
  73. You should begin to convert your code to use these macros as soon as
  74. possible since the old macro with-slots will swap names with with-slots*
  75. sometime soon.
  76.  
  77. A trick you may want to use for remembering the order of the first two
  78. arguments to with-slots* and with-accessors* is that it is "like
  79. multiple-value-bind".
  80.  
  81. ***
  82. In addition this release includes the beginnings of support for doing
  83. some of the compiling which PCL does a load time at compile time
  84. instead.  To use this support, put the form:
  85.  
  86.   (pcl::precompile-random-code-segments)
  87.  
  88. in a file which is compiled after all your other pcl using files are
  89. loaded.  Then arrange for that file to be loaded before all your
  90. other pcl using files are loaded.
  91.  
  92. For example, if your system has two files called "classes" and "methods",
  93. create a new file called "precom" that contains:
  94.  
  95.   (in-package 'pcl)
  96.  
  97.   (pcl::precompile-random-code-segments)
  98.  
  99.  
  100. Then you can use the defsystem stuff defined in the file defsys to
  101. maintain your system as follows:
  102.  
  103. (defsystem my-very-own-system
  104.        "/usr/myname/lisp/"
  105.   ((classes   (precom)           ()                ())
  106.    (methods   (precom classes)   (classes)         ())
  107.    (precom    ()                 (classes methods) (classes methods))))
  108.  
  109. This defsystem should be read as follows:
  110.  
  111. * Define a system named MY-VERY-OWN-SYSTEM, the sources and binaries
  112.   should be in the directory "/usr/me/lisp/".  There are three files
  113.   in the system, there are named classes, methods and precom.  (The
  114.   extension the filenames have depends on the lisp you are running in.)
  115.   
  116. * For the first file, classes, the (precom) in the line means that
  117.   the file precom should be loaded before this file is loaded.  The
  118.   first () means that no other files need to be loaded before this
  119.   file is compiled.  The second () means that changes in other files
  120.   don't force this file to be recompiled.
  121.  
  122. * For the second file, methods, the (precom classes) means that both
  123.   of the files precom and classes must be loaded before this file
  124.   can be loaded.  The (classes) means that the file classes must be
  125.   loaded before this file can be compiled.  The () means that changes
  126.   in other files don't force this file to be recompiled.
  127.  
  128. * For the third file, precom, the first () means that no other files
  129.   need to be loaded before this file is loaded.  The first use of
  130.   (classes methods)  means that both classes and methods must be
  131.   loaded before this file can be compiled.  The second use of (classes
  132.   methods) mean that whenever either classes or methods changes precom
  133.   must be recompiled.
  134.  
  135. Then you can compile your system with:
  136.  
  137.  (operate-on-system 'my-very-own-system :compile)
  138.  
  139. and load your system with:
  140.  
  141.  (operate-on-system 'my-very-own-system :load)
  142.  
  143. ***
  144. The code walker has gone through some signigificant revision.  The
  145. principle change is that the function walk-form now takes three required
  146. arguments, and the walk-function itself now must accept an environment
  147. argument.  There are other changes having to do with the implementation
  148. specific representation of macroexpansion environments.  For details see
  149. the file walk.lisp.
  150.  
  151. ***
  152. The following functions and macros which used to be supported for
  153. backward compatibility only are now not supported at all:
  154.  
  155. WITH* and WITH
  156.  
  157. DEFMETH
  158.  
  159. GET-SLOT
  160.  
  161. MAKE
  162.  
  163.  
  164. ***
  165. There are other small changes in this release.  If you notice one that
  166. causes you problems please send me a message about it.
  167.  
  168.